package com.my.ph.enums;

import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

@Getter
public enum LanguageEnum {

    AY("ay", "Aymara", "艾马拉语"),
    CH("ch", "Chamorro", "查莫罗语"),
    FJ("fj", "Fijian", "斐济语"),
    IT("it", "Italian", "意大利语"),
    NV("nv", "Navajo", "纳瓦霍语"),
    QU("qu", "Quechua", "克丘亚语"),
    RU("ru", "Russian", "俄语"),
    SC("sc", "Sardinian", "撒丁语"),
    SW("sw", "Swahili", "斯瓦希里语"),
    TN("tn", "Tswana", "茨瓦纳语"),
    UR("ur", "Urdu", "乌尔都语"),
    HO("ho", "Hiri Motu", "希里莫图语"),
    KM("km", "Khmer", "高棉语"),
    KJ("kj", "Kuanyama", "宽亚玛语"),
    TT("tt", "Tatar", "鞑靼语"),
    PS("ps", "Pushto", "普什图语"),
    CN("cn", "Cantonese", "粤语"),
    MK("mk", "Macedonian", "马其顿语"),
    YO("yo", "Yoruba", "约鲁巴语"),
    FO("fo", "Faroese", "法罗语"),
    FF("ff", "Fulah", "富拉语"),
    IG("ig", "Igbo", "伊博语"),
    IO("io", "Ido", "伊多语"),
    ID("id", "Indonesian", "印度尼西亚语"),
    KO("ko", "Korean", "韩语"),
    MO("mo", "Moldavian", "摩尔达维亚语"),
    NR("nr", "Ndebele", "恩德贝勒语"),
    PI("pi", "Pali", "巴利语"),
    SO("so", "Somali", "索马里语"),
    SQ("sq", "Albanian", "阿尔巴尼亚语"),
    TA("ta", "Tamil", "泰米尔语"),
    TL("tl", "Tagalog", "他加禄语"),
    TH("th", "Thai", "泰语"),
    VE("ve", "Venda", "文达语"),
    VO("vo", "Volapük", "沃拉普克语"),
    CU("cu", "Slavic", "斯拉夫语"),
    KW("kw", "Cornish", "康沃尔语"),
    FR("fr", "French", "法语"),
    FY("fy", "Frisian", "弗里西语"),
    HT("ht", "Haitian; Haitian Creole", "海地克里奥尔语"),
    IE("ie", "Interlingue", "国际语"),
    IA("ia", "Interlingua", "国际语"),
    MH("mh", "Marshall", "马绍尔语"),
    RN("rn", "Rundi", "隆迪语"),
    SE("se", "Northern Sami", "北萨米语"),
    GD("gd", "Gaelic", "盖尔语"),
    II("ii", "Yi", "彝语"),
    LO("lo", "Lao", "老挝语"),
    LA("la", "Latin", "拉丁语"),
    NY("ny", "Chichewa; Nyanja", "奇切瓦语"),
    OJ("oj", "Ojibwa", "奥吉布瓦语"),
    AB("ab", "Abkhazian", "阿布哈兹语"),
    AR("ar", "Arabic", "阿拉伯语"),
    EE("ee", "Ewe", "埃维语"),
    HI("hi", "Hindi", "印地语"),
    AN("an", "Aragonese", "阿拉贡语"),
    BA("ba", "Bashkir", "巴什基尔语"),
    BN("bn", "Bengali", "孟加拉语"),
    BI("bi", "Bislama", "比斯拉马语"),
    ET("et", "Estonian", "爱沙尼亚语"),
    EU("eu", "Basque", "巴斯克语"),
    GL("gl", "Galician", "加利西亚语"),
    HA("ha", "Hausa", "豪萨语"),
    HZ("hz", "Herero", "赫雷罗语"),
    IU("iu", "Inuktitut", "因纽特语"),
    JV("jv", "Javanese", "爪哇语"),
    KR("kr", "Kanuri", "卡努里语"),
    MN("mn", "Mongolian", "蒙古语"),
    MY("my", "Burmese", "缅甸语"),
    NA("na", "Nauru", "瑙鲁语"),
    PT("pt", "Portuguese", "葡萄牙语"),
    SD("sd", "Sindhi", "信德语"),
    ZU("zu", "Zulu", "祖鲁语"),
    AK("ak", "Akan", "阿坎语"),
    HU("hu", "Hungarian", "匈牙利语"),
    IK("ik", "Inupiaq", "伊努皮克语"),
    KS("ks", "Kashmiri", "克什米尔语"),
    KA("ka", "Georgian", "格鲁吉亚语"),
    LG("lg", "Ganda", "干达语"),
    OC("oc", "Occitan", "奥克语"),
    UZ("uz", "Uzbek", "乌兹别克语"),
    XH("xh", "Xhosa", "科萨语"),
    ZA("za", "Zhuang", "壮语"),
    ZH("zh", "Mandarin", "汉语"),
    EL("el", "Greek", "希腊语"),
    GA("ga", "Irish", "爱尔兰语"),
    GN("gn", "Guarani", "瓜拉尼语"),
    GU("gu", "Gujarati", "古吉拉特语"),
    KL("kl", "Kalaallisut", "格陵兰语"),
    KN("kn", "Kannada", "卡纳达语"),
    KY("ky", "Kirghiz", "吉尔吉斯语"),
    NL("nl", "Dutch", "荷兰语"),
    SL("sl", "Slovenian", "斯洛文尼亚语"),
    SR("sr", "Serbian", "塞尔维亚语"),
    SS("ss", "Swati", "斯瓦蒂语"),
    UG("ug", "Uighur", "维吾尔语"),
    BG("bg", "Bulgarian", "保加利亚语"),
    CO("co", "Corsican", "科西嘉语"),
    CY("cy", "Welsh", "威尔士语"),
    DV("dv", "Divehi", "迪维希语"),
    KI("ki", "Kikuyu", "基库尤语"),
    MT("mt", "Maltese", "马耳他语"),
    NE("ne", "Nepali", "尼泊尔语"),
    SI("si", "Sinhalese", "僧伽罗语"),
    SN("sn", "Shona", "绍纳语"),
    SU("su", "Sundanese", "巽他语"),
    TO("to", "Tonga", "汤加语"),
    WA("wa", "Walloon", "瓦隆语"),
    CR("cr", "Cree", "克里语"),
    FI("fi", "Finnish", "芬兰语"),
    HR("hr", "Croatian", "克罗地亚语"),
    MG("mg", "Malagasy", "马达加斯加语"),
    NB("nb", "Norwegian Bokmål", "挪威书面语"),
    TS("ts", "Tsonga", "聪加语"),
    VI("vi", "Vietnamese", "越南语"),
    HY("hy", "Armenian", "亚美尼亚语"),
    AV("av", "Avaric", "阿瓦尔语"),
    AZ("az", "Azerbaijani", "阿塞拜疆语"),
    GV("gv", "Manx", "马恩岛语"),
    SH("sh", "Serbo-Croatian", "塞尔维亚-克罗地亚语"),
    LV("lv", "Latvian", "拉脱维亚语"),
    MR("mr", "Marathi", "马拉地语"),
    PL("pl", "Polish", "波兰语"),
    RM("rm", "Raeto-Romance", "雷托-罗曼语"),
    TR("tr", "Turkish", "土耳其语"),
    XX("xx", "No Language", "无语言"),
    CA("ca", "Catalan", "加泰罗尼亚语"),
    DE("de", "German", "德语"),
    RW("rw", "Kinyarwanda", "卢旺达语"),
    LN("ln", "Lingala", "林加拉语"),
    RO("ro", "Romanian", "罗马尼亚语"),
    TY("ty", "Tahitian", "塔希提语"),
    TI("ti", "Tigrinya", "提格雷尼亚语"),
    HE("he", "Hebrew", "希伯来语"),
    AS("as", "Assamese", "阿萨姆语"),
    BO("bo", "Tibetan", "藏语"),
    DZ("dz", "Dzongkha", "宗卡语"),
    EO("eo", "Esperanto", "世界语"),
    JA("ja", "Japanese", "日语"),
    NG("ng", "Ndonga", "恩东加语"),
    NO("no", "Norwegian", "挪威语"),
    PA("pa", "Punjabi", "旁遮普语"),
    SA("sa", "Sanskrit", "梵语"),
    AM("am", "Amharic", "阿姆哈拉语"),
    FA("fa", "Persian", "波斯语"),
    AA("aa", "Afar", "阿法尔语"),
    AE("ae", "Avestan", "阿维斯陀语"),
    BR("br", "Breton", "布列塔尼语"),
    IS("is", "Icelandic", "冰岛语"),
    KK("kk", "Kazakh", "哈萨克语"),
    LT("lt", "Lithuanian", "立陶宛语"),
    MI("mi", "Maori", "毛利语"),
    MS("ms", "Malay", "马来语"),
    OR("or", "Oriya", "奥里亚语"),
    ST("st", "Sotho", "索托语"),
    TK("tk", "Turkmen", "土库曼语"),
    AF("af", "Afrikaans", "南非荷兰语"),
    BM("bm", "Bambara", "班巴拉语"),
    BS("bs", "Bosnian", "波斯尼亚语"),
    CS("cs", "Czech", "捷克语"),
    CE("ce", "Chechen", "车臣语"),
    KV("kv", "Komi", "科米语"),
    LB("lb", "Letzeburgesch", "卢森堡语"),
    ND("nd", "Ndebele", "恩德贝勒语"),
    SK("sk", "Slovak", "斯洛伐克语"),
    SM("sm", "Samoan", "萨摩亚语"),
    TG("tg", "Tajik", "塔吉克语"),
    WO("wo", "Wolof", "沃洛夫语"),
    YI("yi", "Yiddish", "意第绪语"),
    BE("be", "Belarusian", "白俄罗斯语"),
    CV("cv", "Chuvash", "楚瓦什语"),
    DA("da", "Danish", "丹麦语"),
    EN("en", "English", "英语"),
    KG("kg", "Kongo", "刚果语"),
    KU("ku", "Kurdish", "库尔德语"),
    LI("li", "Limburgish", "林堡语"),
    LU("lu", "Luba-Katanga", "卢巴-加丹加语"),
    ML("ml", "Malayalam", "马拉雅拉姆语"),
    NN("nn", "Norwegian Nynorsk", "挪威新挪威语"),
    OM("om", "Oromo", "奥罗莫语"),
    OS("os", "Ossetian; Ossetic", "奥塞梯语"),
    SG("sg", "Sango", "桑戈语"),
    ES("es", "Spanish", "西班牙语"),
    SV("sv", "Swedish", "瑞典语"),
    TE("te", "Telugu", "泰卢固语"),
    TW("tw", "Twi", "特维语"),
    UK("uk", "Ukrainian", "乌克兰语");

    private final String iso6391;
    private final String englishName;
    private final String chineseName;

    LanguageEnum(String iso6391, String englishName, String chineseName) {
        this.iso6391 = iso6391;
        this.englishName = englishName;
        this.chineseName = chineseName;
    }

    public static final Map<String, LanguageEnum> MAPPING = Arrays.stream(LanguageEnum.values()).collect(Collectors.toMap(LanguageEnum::getIso6391, Function.identity()));

    public String getChineseNameByCode(String code) {
        return Optional.ofNullable(MAPPING.get(code)).map(LanguageEnum::getChineseName).orElse(null);
    }


}
